package com.example.demo3.controllter;

import com.google.common.base.Stopwatch;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.lang3.time.StopWatch;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * @author admin
 * @Description 测试是否启动
 * @date 2020-07-04 17:33:00
 */
@Slf4j
@RestController
@RequestMapping(value = "/api03")
public class Test {

    @GetMapping(value = "/test")
    public void test() {
        log.info("################### test03 is ok #################");
    }

    public static void main(String[] args) throws InterruptedException {

        /************************************** ① *******************************************/
       /* // 开始时间
        long startTime = System.currentTimeMillis();
        // 执行时间（1s）
        Thread.sleep(1000);
        // 结束时间
        long endTime = System.currentTimeMillis();
        // 计算执行时间
        System.out.printf("执行时长：%d 毫秒.", (endTime - startTime));*/

        /************************************** ② *******************************************/
       /* // 开始时间 = 1 毫秒 = 100 万纳秒
        long startTime = System.nanoTime();
        // 执行时间（1s）
        Thread.sleep(1000);
        // 结束时间
        long endTime = System.nanoTime();
        // 计算执行时间
        System.out.printf("执行时长：%d 纳秒.", (endTime - startTime));*/

        /************************************** ③ *******************************************/
        /*// 开始时间
        Date startDate = new Date();
        // 执行时间（1s）
        Thread.sleep(1000);
        // 结束时间
        Date endDate = new Date();
        //  统计执行时间（毫秒）
        System.out.printf("执行时长：%d 毫秒.", (endDate.getTime() - startDate.getTime()));*/

        /************************************** ④ *******************************************/
        /*StopWatch stopWatch = new StopWatch();
        // 开始时间
        stopWatch.start();
        // 执行时间（1s）
        Thread.sleep(1000);
        // 结束时间
        stopWatch.stop();
        // 统计执行时间（秒）
        System.out.printf("执行时长：%s 秒.%n", stopWatch.getTotalTimeSeconds());
        // 统计执行时间（毫秒）
        System.out.printf("执行时长：%s 毫秒.%n", stopWatch.getTotalTimeMillis());
        // 统计执行时间（纳秒）
        System.out.printf("执行时长：%s 纳秒.%n", stopWatch.getTotalTimeNanos());*/

        /************************************** ⑤ *******************************************/
        StopWatch stopWatch = new StopWatch();
        // 开始时间
        stopWatch.start();
        // 执行时间（1s）
        Thread.sleep(4000);
        // 结束时间
        stopWatch.stop();
        // DurationFormatUtils(格式化时间)
        System.out.println("执行时长: " + DurationFormatUtils.formatDuration(stopWatch.getTime(TimeUnit.MILLISECONDS), "HH:mm:ss"));
        // 统计执行时间（秒）
        System.out.println("执行时长：" + stopWatch.getTime(TimeUnit.SECONDS) + " 秒.");
        // 统计执行时间（毫秒）
        System.out.println("执行时长：" + stopWatch.getTime(TimeUnit.MILLISECONDS) + " 毫秒.");
        // 统计执行时间（纳秒）
        System.out.println("执行时长：" + stopWatch.getTime(TimeUnit.NANOSECONDS) + " 纳秒.");

        /*// 创建并启动计时器
        Stopwatch stopwatch = Stopwatch.createStarted();
        // 执行时间（1s）
        Thread.sleep(1000);
        // 停止计时器
        stopwatch.stop();
        // 执行时间（单位：秒）
        System.out.printf("执行时长：%d 秒. %n", stopwatch.elapsed().getSeconds());
        System.out.printf("执行时长：%d 豪秒.", stopwatch.elapsed(TimeUnit.MILLISECONDS));*/

        /************************************** ⑥ *******************************************/
        /*// 创建并启动计时器
        Stopwatch stopwatch = Stopwatch.createStarted();
        // 执行时间（1s）
        Thread.sleep(1000);
        // 停止计时器
        stopwatch.stop();
        // 执行统计
        System.out.printf("执行时长：%d 毫秒. %n", stopwatch.elapsed(TimeUnit.MILLISECONDS));
        // 清空计时器
        stopwatch.reset();
        // 再次启动统计
        stopwatch.start();
        // 执行时间（2s）
        Thread.sleep(2000);
        // 停止计时器
        stopwatch.stop();
        // 执行统计
        System.out.printf("执行时长：%d 秒. %n", stopwatch.elapsed(TimeUnit.MILLISECONDS));*/
    }

}

